package algorithm.easy;

import java.util.Arrays;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.stream.Collectors;

/**
 * 给你一个整数数组 nums 和一个整数 k ，按以下方法修改该数组：
 * <p>
 * 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。
 * 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。
 * <p>
 * 以这种方式修改数组后，返回数组 可能的最大和
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/maximize-sum-of-array-after-k-negations
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class LargestSumAfterKNegations1005 {

    public static int largestSumAfterKNegations(int[] nums, int k) {
        Arrays.sort(nums);
        int count = (int) Arrays.stream(nums).filter(o -> o <= 0).count();
        if (k <= count) {
            for (int i = 0; i < k; i++) {
                nums[i] = -nums[i];
            }
        } else {
            for (int i = 0; i < count; i++) {
                nums[i] = -nums[i];
            }
            int n = (k - count) % 2;
            if (n == 1) {
                int asInt = Arrays.stream(nums).min().getAsInt();
                return Arrays.stream(nums).sum() - 2 * asInt;
            }
        }
        return Arrays.stream(nums).sum();
    }


    public static void main(String[] args) {
        int i = largestSumAfterKNegations(new int[]{4, 3, 2}, 1);
        System.out.println(i);
    }


}
